package com.bsoft.gol.editor.service;


import ctd.controller.exception.ControllerException;
import hcn.util.BaseResponse;
import com.bsoft.gol.editor.editor.EditorAuthority;
import com.bsoft.gol.editor.editor.EditorQuestionnaire;
import com.bsoft.gol.editor.editor.qo.AuthorityRemoveQo;
import com.bsoft.gol.editor.editor.qo.EditorQuestionnaireQo;
import com.bsoft.gol.editor.editor.qo.EditorAuthorityQo;
import com.bsoft.gol.editor.editor.qo.UpdatetypeQo;
import com.bsoft.gol.editor.editor.response.EditorQuestionnaireDetailRes;
import com.bsoft.gol.editor.editor.response.QueryEditorQuestionnaireListResponse;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 问卷表
 *
 * @author sumu
 */
public interface EditorQuestionnaireApi {

    /**
     * 新增保存问卷表单
     *
     * @param req req
     */
    String addQuestionnaire(EditorQuestionnaire req) throws ControllerException;

    /**
     * 表单列表分页,只有当前用户能看到的表单,当前用户就能对于表单进行修改和编辑
     *
     * @return pageInfo
     */
    BaseResponse<QueryEditorQuestionnaireListResponse> pageList(EditorQuestionnaireQo req) throws ControllerException;



    /**
     * 修改表单类型
     *
     * @return pageInfo
     */
    BaseResponse updatetype(UpdatetypeQo req);

    /**
     * 删除问卷表单
     * @param questionnaireId id
     */
    void removeQuestionnaire(String questionnaireId);
//
    /**
     * 复制表单
     * @return 复制后的id
     */
    String copyQuestion(EditorQuestionnaire req);

    /**
     * 更新表单状态
     * @param questionnaireId id
     * @param questionnaireState state
     * @return 更新条数
     */
    void editState(String questionnaireId, Byte questionnaireState);
//
    /**
     * 包含更新版本的逻辑
     * @param questionnaireId id
     */
    EditorQuestionnaireDetailRes detail(String questionnaireId);

    List<Map<String, Object>> questionVersion(String questionnaireId);

    HashMap<String, ArrayList<EditorAuthority>> authorityList(EditorAuthority req);

    BaseResponse authorityAdd(EditorAuthorityQo req);

    void authorityRemove(AuthorityRemoveQo req);

}